/**
 * 文件：GameLikeDAO.java
 * 作者：苏新阳
 * 完成度：进行中
 * 最后修改日期：2023-7-3 19:22
 */
package com.gomokult.dao;

import com.gomokult.exception.InvalidIDException;

public interface GameLikeDAO {
    /**
     * 根据用户{@code userID}和对局{@code gameID}查询gameLike表，即用户和对局这两存在gameLike表中同一行时，就返回点赞状态{@code liked}为true，若表中无此条记录，就返回false，点赞状态{@code liked}为false。
     * @param userID 执行操作的用户ID
     * @param gameID 目标对局ID
     * @return 一个布尔值，表示该方法是否对评价造成有效的改动。例如当原本的点赞状态与{@code liked}参数一致时，表明执行该方法后没有发生任何变化，返回{@code false}
     * @throws InvalidIDException 当ID无效或不存在时
     */
    boolean selectLikeRecord(int userID, int gameID);

    /**
     * 根据对局{@code gameID}查询gameLike表，求总点赞数
     * @param gameID 目标对局ID
     * @return 返回该对局的总点赞数
     * @throws InvalidIDException 当ID无效或不存在时
     */
    int selectLikeRecord(int gameID);

    /**
     * 根据用户{@code userID}和对局{@code gameID}将两者插入到gameLike表中，表示点赞状态{@code liked}为true。
     * @param userID 执行操作的用户ID
     * @param gameID 目标对局ID
    * @throws InvalidIDException 当ID无效或不存在时
     */
    void insertLikeRecord(int userID, int gameID);

    /**
     * 根据用户{@code userID}和对局{@code gameID}从gameLike表中删除，表示点赞状态{@code liked}更改为false。
     * @param userID 执行操作的用户ID
     * @param gameID 目标对局ID
     * @throws InvalidIDException 当ID无效或不存在时
     */
    void deleteLikeRecord(int userID, int gameID);

}
